bitkeeper revision 1.1471 (428cf949ZdshF_D_GTMuih23dXPidw)
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Thu, 19 May 2005 20:38:33 +0000 (20:38 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Thu, 19 May 2005 20:38:33 +0000 (20:38 +0000)
XendDomain.py:
  Add XendDomainDict for easy by name lookup.
  Don't call self.refresh() from XendDomain.list().
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
tools/python/xen/xend/XendDomain.py

index e06b879bb79a5806a92de51803338b76d1e65d61..31c0d3e77029c04f68f46b83e3db694e8d5785f8 100644 (file)
@@ -35,8 +35,15 @@ class XendDomain:
     """Path to domain database."""
     dbpath = "domain"
 
-    """Table of domain info indexed by domain id."""
-    domains = {}
+    class XendDomainDict(dict):
+        def get_by_name(self, name):
+            try:
+                return filter(lambda d: d.name == name, self.values())[0]
+            except IndexError, err:
+                return None
+
+    """Dict of domain info indexed by domain id."""
+    domains = XendDomainDict()
     
     def __init__(self):
         # Hack alert. Python does not support mutual imports, but XendDomainInfo
@@ -53,16 +60,13 @@ class XendDomain:
         eserver.subscribe('xend.virq', self.onVirq)
         self.initial_refresh()
 
-    def domain_lookup_by_name(self, name):
-        try:
-            return filter(lambda d: d.name == name,
-                          self.domains.values())[0]
-        except IndexError, err:
-            return None
-
-    def domain_lookup_by_id(self, id):
-        return self.domains.get(id)
+    def list(self):
+        """Get list of domain objects.
 
+        @return: domain objects
+        """
+        return self.domains.values()
+    
     def onVirq(self, event, val):
         """Event handler for virq.
         """
@@ -153,8 +157,6 @@ class XendDomain:
                 if i in self.domain_db:
                     del self.domain_db[i]
                 self.db.delete(i)
-        # But also need to make sure are indexed under correct name.
-        # What about entries under info.name ?
         if info.id in self.domains:
             notify = False
         self.domains[info.id] = info
@@ -285,14 +287,6 @@ class XendDomain:
         self.refresh()
         return self.domains.keys()
 
-    def list(self):
-        """Get list of domain objects.
-
-        @return: domain objects
-        """
-        self.refresh()
-        return self.domains.values()
-    
     def domain_create(self, config):
         """Create a domain from a configuration.
 
@@ -362,8 +356,7 @@ class XendDomain:
 
     def domain_lookup(self, name):
         name = str(name)
-        dominfo = (self.domain_lookup_by_name(name) or
-                   self.domain_lookup_by_id(name))
+        dominfo = self.domains.get_by_name(name) or self.domains.get(name)
         if dominfo:
             return dominfo
         try: